package com.jdd.fintech.morse.plugin.ecrypts;

import com.jdd.fintech.morse.plugin.enums.EncrAndDecrAlgorithmTypeEnum;

import javax.crypto.spec.IvParameterSpec;

/**
 * DESede是由DES对称加密算法改进后的一种对称加密算法，又名3DES、TripleDES。<br>
 * 使用 168 位的密钥对资料进行三次加密的一种机制；它通常（但非始终）提供极其强大的安全性。<br>
 * 如果三个 56 位的子元素都相同，则三重 DES 向后兼容 DES。<br>
 * Java中默认实现为：DESede/ECB/PKCS5Padding
 */
public class TripleDES extends SymmetricCrypto {
	private static final long serialVersionUID = 1L;

	static final protected EncrAndDecrAlgorithmTypeEnum DEFAULT_ALGORITHM = EncrAndDecrAlgorithmTypeEnum.TRIPLE_DES;


	// ------------------------------------------------------------------------- Constructor start
	/**
	 * 构造
	 *
	 * @param key     密钥，长度24 bit
	 */
	public TripleDES(String key) {
		super(DEFAULT_ALGORITHM, key);
	}

	/**
	 * 构造
	 *
	 * @param mode    模式
	 * @param padding 补码方式
	 * @param key     密钥，长度24位
	 * @param keyLength 密钥长度
	 * @param iv      加盐
	 */
	public TripleDES(String mode, String padding, String key, Integer keyLength, IvParameterSpec iv) {
		super(DEFAULT_ALGORITHM,  String.format("%s/%s/%s", DEFAULT_ALGORITHM.getValue(), mode, padding), key, keyLength, iv);
	}
	// ------------------------------------------------------------------------- Constructor end

}
